pub mod basic;
pub mod mcrc;

///
/// 线圈寄存器：\
/// 实际上就可以类比为开关量，每个bit都对应一个信号的开关状态。\
/// 所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。\
/// 线圈寄存器支持读也支持写，写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。\
/// 对应上面的功能码也就是：0x01 0x05 0x0f
///
/// 离散输入寄存器：如果线圈寄存器理解了这个自然也明白了。\
/// 离散输入寄存器就相当于线圈寄存器的只读模式，\
/// 他也是每个bit表示一个开关量，而他的开关量只能读取输入的开关信号，是不能够写的。\
/// 比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的 0x02
///
/// 保持寄存器：这个寄存器的单位不再是bit而是两个byte，也就是可以存放具体的数据量的，并且是可读写的。\
/// 比如我我设置时间年月日，不但可以写也可以读出来现在的时间。\
/// 写也分为单个写和多个写，所以功能码有对应的三个：0x03 0x06 0x10
///
/// 输入寄存器：只剩下这最后一个了，这个和保持寄存器类似，但是也是只支持读而不能写。\
/// 一个寄存器也是占据两个byte的空间。\
/// 类比我我通过读取输入寄存器获取现在的AD采集值。\
/// 对应的功能码也就一个 0x04
pub type FunctionCode = u8;

//----
/// 读线圈寄存器
pub static READ_COIL_REGISTER: FunctionCode = 0x01;
/// 读离散输入寄存器
pub static READ_DISCRETE_INPUT_REGISTER: FunctionCode = 0x02;
/// 读保持寄存器
pub static READ_HOLD_REGISTER: FunctionCode = 0x03;
/// 读输入寄存器
pub static READ_INPUT_REGISTER: FunctionCode = 0x04;
/// 写单个线圈寄存器
pub static WRITE_SINGLE_COIL_REGISTER: FunctionCode = 0x05;
/// 写单个保持寄存器
pub static WRITE_SINGLE_HOLD_REGISTER: FunctionCode = 0x06;
/// 写多个线圈寄存器
pub static WRITE_MULTIPLE_COIL_REGISTERS: FunctionCode = 0x0f;
/// 写多个保持寄存器
pub static WRITE_MULTIPLE_HOLD_REGISTERS: FunctionCode = 0x10;
